package com.third.Map;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.*;

/**
 * @author 唐博文
 * @version 2023.1.2
 * @date 2023/10/27 13:52 星期五
 */
public class SearchHttpAK {
    public static String URL = "https://api.map.baidu.com/geocoding/v3?";
    
    public static String AK = "94q7Gdkfn4CRuV9Z3xWxGfZPXzulvAzS";
    
    /*public static void main(String[] args) throws Exception {
        
        SearchHttpAK snCal = new SearchHttpAK();
        
        Map params = new LinkedHashMap<String, String>();
        params.put("address", "北京市海淀区上地十街10号");
        params.put("output", "json");
        params.put("ak", AK);
        params.put("callback", "showLocation");
        
        
        snCal.requestGetAK(URL, params);
    }*/
    
    
    
    
    /**
     * 默认ak
     * 选择了ak，使用IP白名单校验：
     * 根据您选择的AK已为您生成调用代码
     * 检测到您当前的ak设置了IP白名单校验
     * 您的IP白名单中的IP非公网IP，请设置为公网IP，否则将请求失败
     * 请在IP地址为0.0.0.0/0 外网IP的计算发起请求，否则将请求失败
     */
    public List<String> requestGetAK(String address) throws Exception {
        //Map params = new LinkedHashMap<String, String>();
        Map<String, String> param = new LinkedHashMap<>();
        param.put("address",address);
        param.put("output", "json");
        param.put("ak", AK);
        param.put("callback", "showLocation");
        
        StringBuffer queryString = new StringBuffer();
        queryString.append(URL);
        for (Map.Entry<?, ?> pair : param.entrySet()) {
            queryString.append(pair.getKey() + "=");
            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
            queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
            //queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
        }
        
        if (queryString.length() > 0) {
            queryString.deleteCharAt(queryString.length() - 1);
        }
        
        java.net.URL url = new URL(queryString.toString());
        //System.out.println(queryString.toString());
        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.connect();
        
        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        isr.close();
        /*AK: showLocation&&showLocation({"status":0,
        "result":{"location":{"lng":116.3076223267197,"lat":40.05682848596073},
        "precise":1,"confidence":80,"comprehension":100,"level":"门址"}})*/
        System.out.println("AK: " + buffer.toString());
        String lng = buffer.toString().split("lng\":")[1].split(",")[0];
        String lat = buffer.toString().split("lat\":")[1].split("}")[0];
        List list = new ArrayList(Arrays.asList(lng, lat));
        System.out.println("list"+list);
        return list;
    }
}
